#ifndef __CLASS_H__
#define __CLASS_H__

#include <vector>
#include <string>
#include "Range.h"
#include "Random.h"


/**
 *  @file
 *  Class "Class". Or Profession for the Player
 */

/**
 * The Class class.
 * It is to initialized the Player class.
 * Requirements are checked and initial values for different attributes are returned.
 * TODO: Later I would like to add LevelUP information
 */
class Class
{
public:
	Class();
	~Class();

	Class&		operator=(const Class& classToCopy);

	bool		checkRequirements(int iStr, int iRfx, int iInt, int iPsy, int iCha);
	void		setName(std::string name);
	void		setDesc(std::string desc);
	void		setMinimunReq(int iStr, int iRfx, int iInt, int iPsy, int iCha);
	void		setHPMP(int iMinHP, int iMaxHP, int iMinMP, int iMaxMP);
	void		setCombatFactors(int iPhyAtt, int iPhysDef, int iMagAtt, int iMagDef);
	void		setEvasion(int iValue);
	void		setDiscretion(int iStealth, int iPerception);
	void		setGold(int iMinGold, int iMaxGold);
	void		addItem(std::string strItem);
	int			getInitHP();
	int			getInitMP();
	int			getInitPhysAttack();
	int			getInitPhysDefense();
	int			getInitMagAttack();
	int			getInitMagDefense();
	int			getInitEvasion();
	int			getInitStealth();
	int			getInitPerception();
	int			getInitGold();
	std::string	getName();
	void		print();
	void		printName();
	void		printDesc();

	std::vector<std::string>	m_InitEqpt;			//!< initial equipment


private:
	std::string					m_strName;			//!< Name of the Class
	std::string					m_strDesc;			//!< Description of the Class
	int							m_iReqStr;			//!< Strength requirement for the Class
	int							m_iReqRfx;			//!< Reflexes requirement for the Class
	int							m_iReqInt;			//!< Intelligence requirement for the Class
	int							m_iReqPsy;			//!< Psychic requirement for the Class
	int							m_iReqCha;			//!< Charisma requirement for the Class
	Range						m_initHP;			//!< Initial HP Range
	Range						m_initMP;			//!< Initial MP Range
	int							m_iInitPhysAttack;	//!< Initial Attack
	int							m_iInitPhysDefense;	//!< Initial Defense
	int							m_iInitMagAttack;	//!< Initial Magical Attack
	int							m_iInitMagDefense;	//!< Initial Magical Defense
	int							m_iInitEvasion;		//!< Initial Evasion
	int							m_iInitStealth;		//!< Initial Stealth
	int							m_iInitPerception;	//!< Initial Perception
	Range						m_iInitGold;		//!< Initial Range of gold amount
};


#endif // __CLASS_H__
